{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import time\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "from sklearn.model_selection import GridSearchCV,StratifiedKFold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = pd.read_csv(\"RentListingInquries_FE_train.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#用来判断某列是否有缺失值\n",
    "#print(train.isnull().any())\n",
    "\n",
    "y_train = train['interest_level']\n",
    "x_train = train.drop(['interest_level'],axis=1)\n",
    "x_train = np.array(x_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5,shuffle=True,random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "\n",
    "params = dict(subsample=subsample, colsample_bytree=colsample_bytree)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#确定行列的重采样参数, 这是一个三分类的问题 [2 1 0] 为高、中、低三类\n",
    "xgb1 = XGBClassifier(\n",
    "    learning_rate=0.1,\n",
    "    n_estimators=150,    #第二次确定的学习器数目\n",
    "    max_depth=7,         #确定的树的最大深度\n",
    "    min_child_weight=5,  \n",
    "    gamma=0,\n",
    "    subsample=0.3,\n",
    "    colsample_bytree=0.8,\n",
    "    colsample_bylevel=0.7,\n",
    "    reg_alpha = 1.5,     #调整的正则参数\n",
    "    reg_lambda = 0.5,    #调整的正则参数\n",
    "    objective='multi:softprob',\n",
    "    seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time.struct_time(tm_year=2018, tm_mon=5, tm_mday=28, tm_hour=13, tm_min=23, tm_sec=12, tm_wday=0, tm_yday=148, tm_isdst=0)\n",
      "time.struct_time(tm_year=2018, tm_mon=5, tm_mday=28, tm_hour=16, tm_min=24, tm_sec=1, tm_wday=0, tm_yday=148, tm_isdst=0)\n",
      "{'mean_fit_time': array([ 125.9463119 ,  136.5554039 ,  146.27475286,  143.24890208,\n",
      "        133.2777009 ,  126.87543917,  139.74831386,  157.65624666,\n",
      "        157.84867544,  164.17043319,  162.79384823,  152.13762317,\n",
      "        179.0410418 ,  205.41630487,  256.71123042,  250.97511783,\n",
      "        191.56375737,  161.41471066,  171.79226732,  195.43204274,\n",
      "        234.89460015,  196.79367838,  204.97955332,  180.25561061]), 'std_fit_time': array([  4.43447243,   3.83908102,   4.75365749,   4.27367251,\n",
      "        12.70113513,   2.67535357,   7.63104253,   7.6196686 ,\n",
      "         5.28073589,   2.93197865,   3.69960478,   2.94090181,\n",
      "        12.58453885,  12.77527885,  14.44239509,   9.32120064,\n",
      "         4.40237324,   5.00577991,   0.37903131,   2.66015013,\n",
      "         9.46852946,   5.71095147,  20.18291533,  18.00572385]), 'mean_score_time': array([ 0.53352313,  0.45330648,  0.46162968,  0.44669132,  0.48018651,\n",
      "        0.4899066 ,  0.50825405,  0.5549787 ,  0.4447824 ,  0.49862413,\n",
      "        0.58545947,  0.53111444,  0.55938716,  0.69405198,  0.7468771 ,\n",
      "        0.67259674,  0.57333627,  0.50715265,  0.46203241,  0.52239676,\n",
      "        0.59158387,  0.66258397,  0.51538134,  0.46773953]), 'std_score_time': array([ 0.08397111,  0.04497395,  0.04141669,  0.05737179,  0.08651971,\n",
      "        0.05918813,  0.04808945,  0.09351279,  0.03352913,  0.07891064,\n",
      "        0.1603942 ,  0.08153636,  0.06319814,  0.23753941,  0.13857161,\n",
      "        0.14411797,  0.07207195,  0.06844346,  0.01095216,  0.07333093,\n",
      "        0.21099977,  0.22591288,  0.08310756,  0.09715998]), 'param_colsample_bytree': masked_array(data = [0.6 0.6 0.6 0.6 0.6 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.8 0.8 0.8 0.8 0.8 0.8\n",
      " 0.9 0.9 0.9 0.9 0.9 0.9],\n",
      "             mask = [False False False False False False False False False False False False\n",
      " False False False False False False False False False False False False],\n",
      "       fill_value = ?)\n",
      ", 'param_subsample': masked_array(data = [0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8\n",
      " 0.3 0.4 0.5 0.6 0.7 0.8],\n",
      "             mask = [False False False False False False False False False False False False\n",
      " False False False False False False False False False False False False],\n",
      "       fill_value = ?)\n",
      ", 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3}, {'colsample_bytree': 0.6, 'subsample': 0.4}, {'colsample_bytree': 0.6, 'subsample': 0.5}, {'colsample_bytree': 0.6, 'subsample': 0.6}, {'colsample_bytree': 0.6, 'subsample': 0.7}, {'colsample_bytree': 0.6, 'subsample': 0.8}, {'colsample_bytree': 0.7, 'subsample': 0.3}, {'colsample_bytree': 0.7, 'subsample': 0.4}, {'colsample_bytree': 0.7, 'subsample': 0.5}, {'colsample_bytree': 0.7, 'subsample': 0.6}, {'colsample_bytree': 0.7, 'subsample': 0.7}, {'colsample_bytree': 0.7, 'subsample': 0.8}, {'colsample_bytree': 0.8, 'subsample': 0.3}, {'colsample_bytree': 0.8, 'subsample': 0.4}, {'colsample_bytree': 0.8, 'subsample': 0.5}, {'colsample_bytree': 0.8, 'subsample': 0.6}, {'colsample_bytree': 0.8, 'subsample': 0.7}, {'colsample_bytree': 0.8, 'subsample': 0.8}, {'colsample_bytree': 0.9, 'subsample': 0.3}, {'colsample_bytree': 0.9, 'subsample': 0.4}, {'colsample_bytree': 0.9, 'subsample': 0.5}, {'colsample_bytree': 0.9, 'subsample': 0.6}, {'colsample_bytree': 0.9, 'subsample': 0.7}, {'colsample_bytree': 0.9, 'subsample': 0.8}], 'split0_test_score': array([-0.58981139, -0.58435779, -0.58386209, -0.58185741, -0.58233125,\n",
      "       -0.57989306, -0.58731648, -0.58523902, -0.58225275, -0.58109992,\n",
      "       -0.58025864, -0.57943942, -0.58626193, -0.58553561, -0.58506783,\n",
      "       -0.58147556, -0.5808043 , -0.57952365, -0.58864341, -0.58519241,\n",
      "       -0.58383851, -0.58181719, -0.58145032, -0.58027802]), 'split1_test_score': array([-0.59397099, -0.59012944, -0.58903882, -0.58771759, -0.58742098,\n",
      "       -0.58517834, -0.59322196, -0.59061768, -0.58812124, -0.58922259,\n",
      "       -0.5864564 , -0.58554767, -0.58977702, -0.59272654, -0.58813156,\n",
      "       -0.58751114, -0.58570549, -0.5855897 , -0.59193081, -0.58978272,\n",
      "       -0.58922378, -0.58708821, -0.58650919, -0.58614185]), 'split2_test_score': array([-0.59212722, -0.58895046, -0.58661413, -0.58478654, -0.58507965,\n",
      "       -0.58238718, -0.591809  , -0.58755491, -0.58825312, -0.5867175 ,\n",
      "       -0.58528584, -0.58293334, -0.59301742, -0.58960366, -0.58846979,\n",
      "       -0.58605535, -0.58319316, -0.5829846 , -0.59043964, -0.58961453,\n",
      "       -0.58660926, -0.58373585, -0.58388034, -0.58376947]), 'split3_test_score': array([-0.58571496, -0.58086981, -0.5814335 , -0.58037392, -0.57929151,\n",
      "       -0.57693261, -0.58492389, -0.58142079, -0.58106531, -0.57903983,\n",
      "       -0.57794747, -0.57683042, -0.58436825, -0.58149084, -0.58130719,\n",
      "       -0.57829542, -0.57781111, -0.57733212, -0.58659155, -0.58264784,\n",
      "       -0.57919337, -0.57902939, -0.57810951, -0.57805724]), 'split4_test_score': array([-0.59239603, -0.58690852, -0.58606624, -0.58490462, -0.5845989 ,\n",
      "       -0.58467043, -0.59112098, -0.58814211, -0.58723382, -0.58522762,\n",
      "       -0.58372707, -0.58503303, -0.58854941, -0.58799208, -0.58532346,\n",
      "       -0.58506014, -0.58365028, -0.58273342, -0.59028053, -0.588057  ,\n",
      "       -0.58752376, -0.58583445, -0.58409681, -0.58306315]), 'mean_test_score': array([-0.59080402, -0.58624316, -0.58540291, -0.58392796, -0.5837444 ,\n",
      "       -0.58181215, -0.58967837, -0.58659481, -0.58538514, -0.58426143,\n",
      "       -0.58273503, -0.58195659, -0.5883948 , -0.58746972, -0.58565998,\n",
      "       -0.58367944, -0.58223278, -0.58163263, -0.58957715, -0.58705884,\n",
      "       -0.5852776 , -0.58350088, -0.58280916, -0.5822619 ]), 'std_test_score': array([ 0.00287056,  0.00332584,  0.00257911,  0.00256797,  0.00275164,\n",
      "        0.00307652,  0.00307778,  0.00310194,  0.00308557,  0.00371061,\n",
      "        0.00317475,  0.00334451,  0.00296877,  0.00379349,  0.00258521,\n",
      "        0.00334905,  0.00270498,  0.00288591,  0.00182016,  0.00275281,\n",
      "        0.00350662,  0.00287052,  0.00284362,  0.00281375]), 'rank_test_score': array([24, 17, 15, 11, 10,  2, 23, 18, 14, 12,  6,  3, 21, 20, 16,  9,  4,\n",
      "        1, 22, 19, 13,  8,  7,  5]), 'split0_train_score': array([-0.49361071, -0.48457656, -0.47782663, -0.47342802, -0.47203842,\n",
      "       -0.46913438, -0.48991327, -0.4799852 , -0.47361915, -0.47223251,\n",
      "       -0.4693831 , -0.46627868, -0.485305  , -0.47593244, -0.46862968,\n",
      "       -0.46736935, -0.46304089, -0.46532899, -0.48289267, -0.47405273,\n",
      "       -0.46863809, -0.46219652, -0.46178375, -0.46031528]), 'split1_train_score': array([-0.49095325, -0.48366424, -0.47785473, -0.47210084, -0.47089243,\n",
      "       -0.46832484, -0.48681339, -0.47918254, -0.4728297 , -0.46811237,\n",
      "       -0.46572516, -0.465378  , -0.48368679, -0.47253769, -0.4687913 ,\n",
      "       -0.46394921, -0.46149399, -0.46059873, -0.48084078, -0.4714646 ,\n",
      "       -0.46573857, -0.46165322, -0.45941277, -0.45792445]), 'split2_train_score': array([-0.49396664, -0.48419488, -0.47759479, -0.47430082, -0.47077134,\n",
      "       -0.46769823, -0.48825039, -0.47809937, -0.47318482, -0.46900403,\n",
      "       -0.46776642, -0.46512372, -0.48361875, -0.4758809 , -0.47044067,\n",
      "       -0.46635724, -0.46157735, -0.45972896, -0.48186471, -0.47224294,\n",
      "       -0.46734753, -0.46306522, -0.46123129, -0.45800558]), 'split3_train_score': array([-0.49298548, -0.48494609, -0.47845185, -0.47359444, -0.46986025,\n",
      "       -0.4683681 , -0.48888834, -0.47920749, -0.47435378, -0.46871044,\n",
      "       -0.46535455, -0.46524399, -0.48550781, -0.47407563, -0.46922104,\n",
      "       -0.46333512, -0.46290854, -0.4608792 , -0.48198033, -0.47347151,\n",
      "       -0.46839665, -0.46323253, -0.46068906, -0.46027196]), 'split4_train_score': array([-0.4926786 , -0.48595513, -0.47716067, -0.47355201, -0.46864366,\n",
      "       -0.4684911 , -0.48886118, -0.47906194, -0.47215462, -0.46833905,\n",
      "       -0.46514283, -0.46558521, -0.48299637, -0.47465026, -0.46763755,\n",
      "       -0.46444827, -0.46073465, -0.46041474, -0.48038662, -0.47020541,\n",
      "       -0.46436362, -0.46057996, -0.45735936, -0.45875712]), 'mean_train_score': array([-0.49283894, -0.48466738, -0.47777773, -0.47339522, -0.47044122,\n",
      "       -0.46840333, -0.48854532, -0.47910731, -0.47322841, -0.46927968,\n",
      "       -0.46667441, -0.46552192, -0.48422294, -0.47461538, -0.46894405,\n",
      "       -0.46509184, -0.46195108, -0.46139013, -0.48159302, -0.47228744,\n",
      "       -0.46689689, -0.46214549, -0.46009525, -0.45905488]), 'std_train_score': array([ 0.00104598,  0.0007712 ,  0.0004188 ,  0.00071566,  0.00113423,\n",
      "        0.00045754,  0.00101738,  0.00060073,  0.00073933,  0.00150775,\n",
      "        0.00164429,  0.00040822,  0.00099787,  0.0012606 ,  0.00091057,\n",
      "        0.00152277,  0.00088687,  0.00200564,  0.00088704,  0.00138074,\n",
      "        0.00162747,  0.00097194,  0.00157766,  0.00105237])}\n",
      "######################################################################\n",
      "Best: -0.581633 using {'colsample_bytree': 0.8, 'subsample': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nxhhjwvL/AamaY9PP1+DpAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x25e3299beb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "grid_sea = GridSearchCV(xgb1,param_grid=params,scoring=\"neg_log_loss\",n_jobs=2,cv=kfold)\n",
    "\n",
    "print(time.localtime(time.time()))\n",
    "grid_sea.fit(x_train,y_train)\n",
    "print(time.localtime(time.time()))\n",
    "\n",
    "# print(grid_sea.grid_scores_,grid_sea.best_params_,grid_sea.best_score_)\n",
    "print(grid_sea.cv_results_)\n",
    "print(\"######################################################################\")\n",
    "print(\"Best: %f using %s\" % (grid_sea.best_score_, grid_sea.best_params_))\n",
    "\n",
    "test_means = grid_sea.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid_sea.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid_sea.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid_sea.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "pd.DataFrame(grid_sea.cv_results_).to_csv('house_subsample_colsamplebytree_1.csv')\n",
    "\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    plt.plot(subsample, -test_scores[i], label= 'colsample_bytree:'   + str(value))\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'subsample' )\n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig( 'subsample_vs_colsample_bytree1.png' )\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 运行时间约3个半小时 。 结果:{'colsample_bytree': 0.8, 'subsample': 0.8}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
